#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

#define maxsize 100

typedef int ElemType;


// 顺序栈的定义
typedef struct{
    ElemType data[maxsize];
    int top;
}SqStack;



void initStack(SqStack* S); // 初始化栈
bool isEmpty(SqStack* S); // 判断栈是否为空
bool push(SqStack* S, ElemType data);  // 将data存入栈中
bool pop(SqStack* S, ElemType* data); // 弹出栈顶元素并将值存入data中
bool getTop(SqStack* S, ElemType* data); // 将栈顶元素的值存入data中

int main()
{
    SqStack* S = (SqStack *) malloc(sizeof(SqStack));
    initStack(S);
    for(int i = 1; i < 10; i++)
    {
        push(S, i);
    }
    ElemType data;
    for(int i = 1; i < 11; i++)
    {
        pop(S, &data);
        printf("%d ", data);
    }
    printf("\n");
    return 0;
}


void initStack(SqStack* S)
{
    S->top = -1;
}

bool isEmpty(SqStack* S)
{
    return S->top == -1;
}

bool push(SqStack* S, ElemType data)
{
    if (S->top == maxsize-1)
    {
        printf("Stack Overflow\n");
        return false;
    }
    S->data[++S->top] = data;
    return true;
}

bool pop(SqStack* S, ElemType* data)
{
    if(isEmpty(S))
    {
        printf("Stack is Empty\n");
        return false;
    }
    *data = S->data[S->top--];
    return true;
}

bool getTop(SqStack* S, ElemType* data)
{
    if(isEmpty(S))
    {
        printf("Stack is Empty\n");
        return false;
    }
    *data = S->data[S->top];
    return true;
}
